iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0
Software Development

被容器束縛住的小宇宙系列 第 26

Day26 Kubernetes的工具人兄弟--CronJob

  • 分享至 

  • xImage
  •  

昨天跟各位介紹 Kubernetes Job 主要負責的是短時及批量的工作負載。

而今天要介紹的是 Job 的兄弟 CronJob。

Kubernetes CronJob 跟 Job 的工作差不多,比較顯著的差異為 CronJob 主要用於執行週期性的動作,像是:備份、報告生成等。在這些任務中都應該要配置為週期性重複的,例如:每天、每月或每年一次,這些都可以自行定義任務開始執行的時間間隔。

不過這邊有一個需要注意的地方是,如 v1 CronJob API 裡面所述,官方版本並不支援設置時區。 Kubernetes 的官方項目不支持設置像是 CRON_TZ 或是 TZ 等變量。這兩個變量用於解析及計算下一個 Job 創建時間所使用的內部庫中一個實現細節。

以下我們來試著創建一個會在每分鐘打印出當前時間和問候消息的 CronJob :

# test_cronjob.yaml
apiVersion: batch/v1beta
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

接著將它創建起來:

kubectl apply -f test_cronjob.yaml

接下來來觀察一下他創建的 Pod :

kubectl get pod 
NAME                     READY   STATUS      RESTARTS   AGE
hello-1663211640-xsx54   0/1     Completed   0          2m19s
hello-1663211700-f49v5   0/1     Completed   0          79s
hello-1663211760-t9xzd   0/1     Completed   0          28s

這邊我們發現他產生了 3 個 pod 來執行我們賦予的工作,過了一陣子再查看一次會發現,原本的 3 個 pod 已不存在,而且又出現 3 個新的 Pod ,這是因為 CronJob 文件裡有一個預設的參數 successfulJobsHistoryLimit ,而這參數所代表的是要保留的成功完成作業數,它的預設值是 3 ,若超過的話,它會自動將舊的 Pod 刪掉。

這時候我們可以看看在這些 Pod 創建期間做了什麼事:

ubuntu@ubuntu-pve:~$ kubectl logs hello-1663211700-f49v5 
Thu Sep 15 03:15:15 UTC 2022
Hello from the Kubernetes cluster

根據輸出的結果可以發現它將目前的時間及預設的訊息印出來了,完成了我們所賦予的任務。在接下來的每一分鐘,它都會建立一個新的 Pod 繼續定時完成任務。

那當然,如果要根據自己的需求去定義他的週期的話也可以,只要修改 schedule 裡的 * 字號就可以更動,而每一個位置都代表著不同的時間,

# ┌───────────── 分鐘 (0 - 59)
# │ ┌───────────── 小時 (0 - 23)
# │ │ ┌───────────── 月的某日 (1 - 31)
# │ │ │ ┌───────────── 月份 (1 - 12)
# │ │ │ │ ┌───────────── 周的某天 (0 - 6)
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ │
# * * * * *

可以根據上面的規則,去定義自己想要的週期,例如:
每年1 月1 日的午夜運行一次 0011*
每天早上8點運行一次 08***

介紹到這邊,已經把一些基本的 CronJob 介紹完了,如果有讀者想要更深入的研究一些定義的參數的話,不仿可以看看 CronJob 的官方 Documentation

那今天就先到這邊吧,大家掰掰!


上一篇
Day25 Kubernetes 的小小工具人 – Job
下一篇
Day27 管理系統設定 -- ConfigMap
系列文
被容器束縛住的小宇宙30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言